library(tidyverse)
library(here)
library(spotifyr)
library(viridis)
Carregando pacotes exigidos: viridisLite
theme_set(theme_bw())

Considerando algumas das boybands mais famosas ao longo dos anos, elas apresentam um mesmo molde? Ou seja, a mesma média de tempo / energia / etc?

Boybands são bandas formadas geralmente por meninos adolescentes, e o estilo musical é bem característico, com músicas animadas e dançantes, e algumas baladas. Iremos analisar as principais músicas de várias boybands presentes no Spotify, entre elas as clássicas NSYNC e Backstreet Boys, além do fenômeno kpop BTS. Queremos saber se há um padrão nas características de Tempo, Dançabilidade, Valência e Energia. Tempo é a velocidade ou ritmo de uma música e é medido em batidas por minuto (BPM); Dançabilidade descreve como uma música é adequada para a dança baseada em uma combinação de elementos musicais (quanto mais próximo de 1, mais dançante); Valência mede a positividade da faixa (alta Valência significa mais positiva (por exemplo, felizes, alegres, eufóricas), enquanto baixa valência significa mais negativa (por exemplo, triste, deprimido, zangado); Energia é uma medida de 0 a 1 e representa uma medida de intensidade e atividade. A playlist base pode ser encontrada em: https://open.spotify.com/user/gabimotta15/playlist/47WfTEyFNe64N1OxeQ7xbo?si=g93Ia7niTlKYnjJlrn7dQA

boybands = read_csv(here("data/playlist-boybands.csv"))
Parsed with column specification:
cols(
  danceability = col_double(),
  energy = col_double(),
  key = col_character(),
  loudness = col_double(),
  mode = col_character(),
  speechiness = col_double(),
  acousticness = col_double(),
  instrumentalness = col_double(),
  liveness = col_double(),
  valence = col_double(),
  tempo = col_double(),
  track_uri = col_character(),
  duration_ms = col_double(),
  time_signature = col_integer(),
  key_mode = col_character(),
  track_name = col_character(),
  album_name = col_character(),
  artist = col_character()
)
sumarios = boybands %>% 
    group_by(artist) %>%
    summarise(media_tempo = mean(tempo), media_energia = mean(energy), media_danca = mean(danceability), media_valencia = mean(valence))
b = sumarios %>% 
    ggplot(aes(y = artist)) + 
    geom_point(aes(x = media_energia, color = "Energia")) + 
    geom_point(aes(x = media_danca, color = "Dançabilidade")) +
    geom_point(aes(x = media_valencia, color = "Valência")) +
    labs(x = "Médias dos Atributos", y = "Artista" , color = "Atributo")
plotly::ggplotly(b)
We recommend that you use the dev version of ggplot2 with `ggplotly()`
Install it with: `devtools::install_github('hadley/ggplot2')`

A maioria das boybands apresenta um padrão de média de Energia acima de 0.7, e média de Dançabilidade entre 0.5 e 0.7. Apenas a Valência se destaca, tendo bandas muito positivas como Menudo (quase 0.8 de Valência), e bandas muito negativas como The Wanted (abaixo de 0.4).

p = boybands %>% 
    mutate(faixa = paste(track_name, album_name)) %>% 
    ggplot(aes(x = artist,
               color = artist,
               label = faixa,
               y = tempo)) + 
    geom_point() +
    geom_line() +
    scale_x_discrete(labels = abbreviate) +
    labs(x = "Artista", y = "Tempo (BPM)" , color = "Artista")
plotly::ggplotly(p)
We recommend that you use the dev version of ggplot2 with `ggplotly()`
Install it with: `devtools::install_github('hadley/ggplot2')`

Em relação ao Tempo, é possível observar uma grande variação entre as bandas, portanto não há um padrão específico. Existem bandas com um espaçamento de Tempo bem pequeno como a coreana SHINee, e outras bem espalhadas ao longo da escala como McFly.

Como é a concentração de Energia e Valência das boybands de KPop e música Latina?

As músicas coreanas e latinas possuem ritmos fortes, portanto vamos observar o comportamento das bandas BTS, CNCO, Menudo e SHINee.

p = boybands %>% 
    filter(artist == "BTS" | artist == "CNCO" | artist == "Menudo" | artist == "SHINee") %>%
    mutate(faixa = paste(track_name, album_name)) %>% 
    ggplot(aes(x = energy, 
               group = artist,
               label = track_name,
               y = valence)) + 
    stat_density2d(aes(fill=..level..), geom="polygon", n = 100, h = .25) +
    scale_fill_viridis() +  
    facet_wrap(~artist) + 
    scale_x_continuous(limits = c(-.05, 1.05)) + 
    scale_y_continuous(limits = c(-.05, 1.05)) + 
    theme(legend.position = "None") + 
    labs(x = "Energia", 
         y = "Valência")
plotly::ggplotly(p)
We recommend that you use the dev version of ggplot2 with `ggplotly()`
Install it with: `devtools::install_github('hadley/ggplot2')`

As músicas dessas bandas estão mais concentradas em altos níveis de Energia e Valência, logo são animadas e positivas.

Lady Gaga possui álbuns de vários estilos, o Tempo varia muito para cada álbum?

Lady Gaga é uma artista muito talentosa, ganhou vários prêmios com seus álbuns, que vão do pop ao jazz. Como é o comportamento do Tempo nesses álbuns? Tempo é a velocidade ou ritmo de uma música e é medido em batidas por minuto (BPM). Como os estilos musicais mudam, é esperado que haja uma variação nesse Tempo. Para essa análise serão desconsiderados singles e álbuns promocionais. A playlist base pode ser encontrada em: https://open.spotify.com/user/gabimotta15/playlist/7pH3kwz0vVTgmKt2cR7Z9o?si=JcvkobZXSkKBCE13ubsM7w

gaga = read_csv(here("data/playlist_gaga.csv"))
mlabels <- c("ARTPOP","Born This Way", "Cheek to Cheek", "Joanne", "The Fame", "The Fame Monster")

g = gaga %>% 
    mutate(faixa = paste(track_name)) %>% 
    ggplot(aes(x = album_name,
               label = faixa,
               y = tempo)) + 
    geom_point(size = .8, alpha = .8) +
    labs(x = "Álbum", y = "Tempo (BPM)", color="Álbum") +
    scale_x_discrete(labels=mlabels)

plotly::ggplotly(g)

Podemos perceber que os Tempos estão geralmente concentrados entre 100 e 140 BPM, mas existe uma dispersão maior nos álbuns Cheek to Cheek e Joanne, que são os álbuns de estilos mais diferentes dos outros. Portanto o Tempo não varia muito entre os álbuns mais pop, apenas nos álbuns de jazz e country.

Os álbuns com maior variação de Tempo são acústicos?

Quanto mais próximo de 1 é o nível de acústica, mais provável é que a música seja acústica. Músicas acústicas geralmente são mais lentas, portanto possuem menor Tempo. Na análise anterior os álbuns Joanne e Cheek to Cheek se destacaram por não estar exclusivamente na faixa dos 100 a 140 BPM, e serão observados agora em relação à acústica.

g = gaga %>% 
    filter(album_name == "Cheek To Cheek (Deluxe)" | album_name == "Joanne (Deluxe)") %>%
    mutate(faixa = paste(track_name)) %>% 
    ggplot(aes(x = acousticness,
               label = faixa,
               color = album_name,
               y = tempo)) + 
    geom_point(size = .8, alpha = .8) +
    labs(x = "Acústica", y = "Tempo (BPM)", color = "Álbum")

plotly::ggplotly(g)

Vemos que o álbum Cheek to Cheek é quase totalmente acústico, todas as músicas estão acima de 0.5 no nível de acústica, enquanto o Joanne está bem próximo de 0. As faixas Angel Down e Million Reasons são tocadas no piano e no violão, por isso apresentam maior acústica que as outras faixas do Joanne.

LS0tDQp0aXRsZTogIlByb2IyQ1AzOiBVbWEgYW7DoWxpc2Ugc3VhIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0OiB5ZXMNCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQotLS0NCg0KYGBge3J9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoaGVyZSkNCmxpYnJhcnkoc3BvdGlmeXIpDQpsaWJyYXJ5KHZpcmlkaXMpDQp0aGVtZV9zZXQodGhlbWVfYncoKSkNCmBgYA0KDQojIENvbnNpZGVyYW5kbyBhbGd1bWFzIGRhcyBib3liYW5kcyBtYWlzIGZhbW9zYXMgYW8gbG9uZ28gZG9zIGFub3MsIGVsYXMgYXByZXNlbnRhbSB1bSBtZXNtbyBtb2xkZT8gT3Ugc2VqYSwgYSBtZXNtYSBtw6lkaWEgZGUgdGVtcG8gLyBlbmVyZ2lhIC8gZXRjPw0KDQpCb3liYW5kcyBzw6NvIGJhbmRhcyBmb3JtYWRhcyBnZXJhbG1lbnRlIHBvciBtZW5pbm9zIGFkb2xlc2NlbnRlcywgZSBvIGVzdGlsbyBtdXNpY2FsIMOpIGJlbSBjYXJhY3RlcsOtc3RpY28sIGNvbSBtw7pzaWNhcyBhbmltYWRhcyBlIGRhbsOnYW50ZXMsIGUgYWxndW1hcyBiYWxhZGFzLiBJcmVtb3MgYW5hbGlzYXIgYXMgcHJpbmNpcGFpcyBtw7pzaWNhcyBkZSB2w6FyaWFzIGJveWJhbmRzIHByZXNlbnRlcyBubyBTcG90aWZ5LCBlbnRyZSBlbGFzIGFzIGNsw6Fzc2ljYXMgTlNZTkMgZSBCYWNrc3RyZWV0IEJveXMsIGFsw6ltIGRvIGZlbsO0bWVubyBrcG9wIEJUUy4gUXVlcmVtb3Mgc2FiZXIgc2UgaMOhIHVtIHBhZHLDo28gbmFzIGNhcmFjdGVyw61zdGljYXMgZGUgVGVtcG8sIERhbsOnYWJpbGlkYWRlLCBWYWzDqm5jaWEgZSBFbmVyZ2lhLg0KVGVtcG8gw6kgYSB2ZWxvY2lkYWRlIG91IHJpdG1vIGRlIHVtYSBtw7pzaWNhIGUgw6kgbWVkaWRvIGVtIGJhdGlkYXMgcG9yIG1pbnV0byAoQlBNKTsNCkRhbsOnYWJpbGlkYWRlIGRlc2NyZXZlIGNvbW8gdW1hIG3DunNpY2Egw6kgYWRlcXVhZGEgcGFyYSBhIGRhbsOnYSBiYXNlYWRhIGVtIHVtYSBjb21iaW5hw6fDo28gZGUgZWxlbWVudG9zIG11c2ljYWlzIChxdWFudG8gbWFpcyBwcsOzeGltbyBkZSAxLCBtYWlzIGRhbsOnYW50ZSk7DQpWYWzDqm5jaWEgbWVkZSBhIHBvc2l0aXZpZGFkZSBkYSBmYWl4YSAoYWx0YSBWYWzDqm5jaWEgc2lnbmlmaWNhIG1haXMgcG9zaXRpdmEgKHBvciBleGVtcGxvLCBmZWxpemVzLCBhbGVncmVzLCBldWbDs3JpY2FzKSwgZW5xdWFudG8gYmFpeGEgdmFsw6puY2lhIHNpZ25pZmljYSBtYWlzIG5lZ2F0aXZhIChwb3IgZXhlbXBsbywgdHJpc3RlLCBkZXByaW1pZG8sIHphbmdhZG8pOw0KRW5lcmdpYSDDqSB1bWEgbWVkaWRhIGRlIDAgYSAxIGUgcmVwcmVzZW50YSB1bWEgbWVkaWRhIGRlIGludGVuc2lkYWRlIGUgYXRpdmlkYWRlLg0KQSBwbGF5bGlzdCBiYXNlIHBvZGUgc2VyIGVuY29udHJhZGEgZW06IGh0dHBzOi8vb3Blbi5zcG90aWZ5LmNvbS91c2VyL2dhYmltb3R0YTE1L3BsYXlsaXN0LzQ3V2ZURXlGTmU2NE4xT3hlUTd4Ym8/c2k9ZzkzSWE3bmlUbEtZbmpKbHJuN2RRQQ0KDQpgYGB7cn0NCmJveWJhbmRzID0gcmVhZF9jc3YoaGVyZSgiZGF0YS9wbGF5bGlzdC1ib3liYW5kcy5jc3YiKSkNCmBgYA0KYGBge3J9DQpzdW1hcmlvcyA9IGJveWJhbmRzICU+JSANCiAgICBncm91cF9ieShhcnRpc3QpICU+JQ0KICAgIHN1bW1hcmlzZShtZWRpYV90ZW1wbyA9IG1lYW4odGVtcG8pLCBtZWRpYV9lbmVyZ2lhID0gbWVhbihlbmVyZ3kpLCBtZWRpYV9kYW5jYSA9IG1lYW4oZGFuY2VhYmlsaXR5KSwgbWVkaWFfdmFsZW5jaWEgPSBtZWFuKHZhbGVuY2UpKQ0KYGBgDQoNCmBgYHtyfQ0KDQpiID0gc3VtYXJpb3MgJT4lIA0KICAgIGdncGxvdChhZXMoeSA9IGFydGlzdCkpICsgDQogICAgZ2VvbV9wb2ludChhZXMoeCA9IG1lZGlhX2VuZXJnaWEsIGNvbG9yID0gIkVuZXJnaWEiKSkgKyANCiAgICBnZW9tX3BvaW50KGFlcyh4ID0gbWVkaWFfZGFuY2EsIGNvbG9yID0gIkRhbsOnYWJpbGlkYWRlIikpICsNCiAgICBnZW9tX3BvaW50KGFlcyh4ID0gbWVkaWFfdmFsZW5jaWEsIGNvbG9yID0gIlZhbMOqbmNpYSIpKSArDQogICAgbGFicyh4ID0gIk3DqWRpYXMgZG9zIEF0cmlidXRvcyIsIHkgPSAiQXJ0aXN0YSIgLCBjb2xvciA9ICJBdHJpYnV0byIpDQoNCnBsb3RseTo6Z2dwbG90bHkoYikNCmBgYA0KDQpBIG1haW9yaWEgZGFzIGJveWJhbmRzIGFwcmVzZW50YSB1bSBwYWRyw6NvIGRlIG3DqWRpYSBkZSBFbmVyZ2lhIGFjaW1hIGRlIDAuNywgZSBtw6lkaWEgZGUgRGFuw6dhYmlsaWRhZGUgZW50cmUgMC41IGUgMC43LiBBcGVuYXMgYSBWYWzDqm5jaWEgc2UgZGVzdGFjYSwgdGVuZG8gYmFuZGFzIG11aXRvIHBvc2l0aXZhcyBjb21vIE1lbnVkbyAocXVhc2UgMC44IGRlIFZhbMOqbmNpYSksIGUgYmFuZGFzIG11aXRvIG5lZ2F0aXZhcyBjb21vIFRoZSBXYW50ZWQgKGFiYWl4byBkZSAwLjQpLg0KDQpgYGB7ciBmaWcud2lkdGg9OX0NCnAgPSBib3liYW5kcyAlPiUgDQogICAgbXV0YXRlKGZhaXhhID0gcGFzdGUodHJhY2tfbmFtZSwgYWxidW1fbmFtZSkpICU+JSANCiAgICBnZ3Bsb3QoYWVzKHggPSBhcnRpc3QsDQogICAgICAgICAgICAgICBjb2xvciA9IGFydGlzdCwNCiAgICAgICAgICAgICAgIGxhYmVsID0gZmFpeGEsDQogICAgICAgICAgICAgICB5ID0gdGVtcG8pKSArIA0KICAgIGdlb21fcG9pbnQoKSArDQogICAgZ2VvbV9saW5lKCkgKw0KICAgIHNjYWxlX3hfZGlzY3JldGUobGFiZWxzID0gYWJicmV2aWF0ZSkgKw0KICAgIGxhYnMoeCA9ICJBcnRpc3RhIiwgeSA9ICJUZW1wbyAoQlBNKSIgLCBjb2xvciA9ICJBcnRpc3RhIikNCg0KcGxvdGx5OjpnZ3Bsb3RseShwKQ0KYGBgDQpFbSByZWxhw6fDo28gYW8gVGVtcG8sIMOpIHBvc3PDrXZlbCBvYnNlcnZhciB1bWEgZ3JhbmRlIHZhcmlhw6fDo28gZW50cmUgYXMgYmFuZGFzLCBwb3J0YW50byBuw6NvIGjDoSB1bSBwYWRyw6NvIGVzcGVjw61maWNvLiBFeGlzdGVtIGJhbmRhcyBjb20gdW0gZXNwYcOnYW1lbnRvIGRlIFRlbXBvIGJlbSBwZXF1ZW5vIGNvbW8gYSBjb3JlYW5hIFNISU5lZSwgZSBvdXRyYXMgYmVtIGVzcGFsaGFkYXMgYW8gbG9uZ28gZGEgZXNjYWxhIGNvbW8gTWNGbHkuDQoNCiMjIENvbW8gw6kgYSBjb25jZW50cmHDp8OjbyBkZSBFbmVyZ2lhIGUgVmFsw6puY2lhIGRhcyBib3liYW5kcyBkZSBLUG9wIGUgbcO6c2ljYSBMYXRpbmE/DQpBcyBtw7pzaWNhcyBjb3JlYW5hcyBlIGxhdGluYXMgcG9zc3VlbSByaXRtb3MgZm9ydGVzLCBwb3J0YW50byB2YW1vcyBvYnNlcnZhciBvIGNvbXBvcnRhbWVudG8gZGFzIGJhbmRhcyBCVFMsIENOQ08sIE1lbnVkbyBlIFNISU5lZS4NCg0KYGBge3J9DQpwID0gYm95YmFuZHMgJT4lIA0KICAgIGZpbHRlcihhcnRpc3QgPT0gIkJUUyIgfCBhcnRpc3QgPT0gIkNOQ08iIHwgYXJ0aXN0ID09ICJNZW51ZG8iIHwgYXJ0aXN0ID09ICJTSElOZWUiKSAlPiUNCiAgICBtdXRhdGUoZmFpeGEgPSBwYXN0ZSh0cmFja19uYW1lLCBhbGJ1bV9uYW1lKSkgJT4lIA0KICAgIGdncGxvdChhZXMoeCA9IGVuZXJneSwgDQogICAgICAgICAgICAgICBncm91cCA9IGFydGlzdCwNCiAgICAgICAgICAgICAgIGxhYmVsID0gdHJhY2tfbmFtZSwNCiAgICAgICAgICAgICAgIHkgPSB2YWxlbmNlKSkgKyANCiAgICBzdGF0X2RlbnNpdHkyZChhZXMoZmlsbD0uLmxldmVsLi4pLCBnZW9tPSJwb2x5Z29uIiwgbiA9IDEwMCwgaCA9IC4yNSkgKw0KICAgIHNjYWxlX2ZpbGxfdmlyaWRpcygpICsgIA0KICAgIGZhY2V0X3dyYXAofmFydGlzdCkgKyANCiAgICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygtLjA1LCAxLjA1KSkgKyANCiAgICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygtLjA1LCAxLjA1KSkgKyANCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiTm9uZSIpICsgDQogICAgbGFicyh4ID0gIkVuZXJnaWEiLCANCiAgICAgICAgIHkgPSAiVmFsw6puY2lhIikNCnBsb3RseTo6Z2dwbG90bHkocCkNCmBgYA0KQXMgbcO6c2ljYXMgZGVzc2FzIGJhbmRhcyBlc3TDo28gbWFpcyBjb25jZW50cmFkYXMgZW0gYWx0b3MgbsOtdmVpcyBkZSBFbmVyZ2lhIGUgVmFsw6puY2lhLCBsb2dvIHPDo28gYW5pbWFkYXMgZSBwb3NpdGl2YXMuDQoNCiMgTGFkeSBHYWdhIHBvc3N1aSDDoWxidW5zIGRlIHbDoXJpb3MgZXN0aWxvcywgbyBUZW1wbyB2YXJpYSBtdWl0byBwYXJhIGNhZGEgw6FsYnVtPw0KDQpMYWR5IEdhZ2Egw6kgdW1hIGFydGlzdGEgbXVpdG8gdGFsZW50b3NhLCBnYW5ob3UgdsOhcmlvcyBwcsOqbWlvcyBjb20gc2V1cyDDoWxidW5zLCBxdWUgdsOjbyBkbyBwb3AgYW8gamF6ei4gQ29tbyDDqSBvIGNvbXBvcnRhbWVudG8gZG8gVGVtcG8gbmVzc2VzIMOhbGJ1bnM/IFRlbXBvIMOpIGEgdmVsb2NpZGFkZSBvdSByaXRtbyBkZSB1bWEgbcO6c2ljYSBlIMOpIG1lZGlkbyBlbSBiYXRpZGFzIHBvciBtaW51dG8gKEJQTSkuIENvbW8gb3MgZXN0aWxvcyBtdXNpY2FpcyBtdWRhbSwgw6kgZXNwZXJhZG8gcXVlIGhhamEgdW1hIHZhcmlhw6fDo28gbmVzc2UgVGVtcG8uIFBhcmEgZXNzYSBhbsOhbGlzZSBzZXLDo28gZGVzY29uc2lkZXJhZG9zIHNpbmdsZXMgZSDDoWxidW5zIHByb21vY2lvbmFpcy4NCkEgcGxheWxpc3QgYmFzZSBwb2RlIHNlciBlbmNvbnRyYWRhIGVtOiBodHRwczovL29wZW4uc3BvdGlmeS5jb20vdXNlci9nYWJpbW90dGExNS9wbGF5bGlzdC83cEgza3d6MHZWVGdtS3QyY1I3WjlvP3NpPUpjdmtvYlpYU2tLQkNFMTN1YnNNN3cNCg0KYGBge3J9DQpnYWdhID0gcmVhZF9jc3YoaGVyZSgiZGF0YS9wbGF5bGlzdF9nYWdhLmNzdiIpKQ0KYGBgDQoNCmBgYHtyfQ0KbWxhYmVscyA8LSBjKCJBUlRQT1AiLCJCb3JuIFRoaXMgV2F5IiwgIkNoZWVrIHRvIENoZWVrIiwgIkpvYW5uZSIsICJUaGUgRmFtZSIsICJUaGUgRmFtZSBNb25zdGVyIikNCg0KZyA9IGdhZ2EgJT4lIA0KICAgIG11dGF0ZShmYWl4YSA9IHBhc3RlKHRyYWNrX25hbWUpKSAlPiUgDQogICAgZ2dwbG90KGFlcyh4ID0gYWxidW1fbmFtZSwNCiAgICAgICAgICAgICAgIGxhYmVsID0gZmFpeGEsDQogICAgICAgICAgICAgICB5ID0gdGVtcG8pKSArIA0KICAgIGdlb21fcG9pbnQoc2l6ZSA9IC44LCBhbHBoYSA9IC44KSArDQogICAgbGFicyh4ID0gIsOBbGJ1bSIsIHkgPSAiVGVtcG8gKEJQTSkiLCBjb2xvcj0iw4FsYnVtIikgKw0KICAgIHNjYWxlX3hfZGlzY3JldGUobGFiZWxzPW1sYWJlbHMpDQoNCnBsb3RseTo6Z2dwbG90bHkoZykNCmBgYA0KDQpQb2RlbW9zIHBlcmNlYmVyIHF1ZSBvcyBUZW1wb3MgZXN0w6NvIGdlcmFsbWVudGUgY29uY2VudHJhZG9zIGVudHJlIDEwMCBlIDE0MCBCUE0sIG1hcyBleGlzdGUgdW1hIGRpc3BlcnPDo28gbWFpb3Igbm9zIMOhbGJ1bnMgQ2hlZWsgdG8gQ2hlZWsgZSBKb2FubmUsIHF1ZSBzw6NvIG9zIMOhbGJ1bnMgZGUgZXN0aWxvcyBtYWlzIGRpZmVyZW50ZXMgZG9zIG91dHJvcy4gUG9ydGFudG8gbyBUZW1wbyBuw6NvIHZhcmlhIG11aXRvIGVudHJlIG9zIMOhbGJ1bnMgbWFpcyBwb3AsIGFwZW5hcyBub3Mgw6FsYnVucyBkZSBqYXp6IGUgY291bnRyeS4NCg0KIyMgT3Mgw6FsYnVucyBjb20gbWFpb3IgdmFyaWHDp8OjbyBkZSBUZW1wbyBzw6NvIGFjw7pzdGljb3M/DQoNClF1YW50byBtYWlzIHByw7N4aW1vIGRlIDEgw6kgbyBuw612ZWwgZGUgYWPDunN0aWNhLCBtYWlzIHByb3bDoXZlbCDDqSBxdWUgYSBtw7pzaWNhIHNlamEgYWPDunN0aWNhLiBNw7pzaWNhcyBhY8O6c3RpY2FzIGdlcmFsbWVudGUgc8OjbyBtYWlzIGxlbnRhcywgcG9ydGFudG8gcG9zc3VlbSBtZW5vciBUZW1wby4gTmEgYW7DoWxpc2UgYW50ZXJpb3Igb3Mgw6FsYnVucyBKb2FubmUgZSBDaGVlayB0byBDaGVlayBzZSBkZXN0YWNhcmFtIHBvciBuw6NvIGVzdGFyIGV4Y2x1c2l2YW1lbnRlIG5hIGZhaXhhIGRvcyAxMDAgYSAxNDAgQlBNLCBlIHNlcsOjbyBvYnNlcnZhZG9zIGFnb3JhIGVtIHJlbGHDp8OjbyDDoCBhY8O6c3RpY2EuDQoNCmBgYHtyfQ0KZyA9IGdhZ2EgJT4lIA0KICAgIGZpbHRlcihhbGJ1bV9uYW1lID09ICJDaGVlayBUbyBDaGVlayAoRGVsdXhlKSIgfCBhbGJ1bV9uYW1lID09ICJKb2FubmUgKERlbHV4ZSkiKSAlPiUNCiAgICBtdXRhdGUoZmFpeGEgPSBwYXN0ZSh0cmFja19uYW1lKSkgJT4lIA0KICAgIGdncGxvdChhZXMoeCA9IGFjb3VzdGljbmVzcywNCiAgICAgICAgICAgICAgIGxhYmVsID0gZmFpeGEsDQogICAgICAgICAgICAgICBjb2xvciA9IGFsYnVtX25hbWUsDQogICAgICAgICAgICAgICB5ID0gdGVtcG8pKSArIA0KICAgIGdlb21fcG9pbnQoc2l6ZSA9IC44LCBhbHBoYSA9IC44KSArDQogICAgbGFicyh4ID0gIkFjw7pzdGljYSIsIHkgPSAiVGVtcG8gKEJQTSkiLCBjb2xvciA9ICLDgWxidW0iKQ0KDQpwbG90bHk6OmdncGxvdGx5KGcpDQpgYGANCg0KVmVtb3MgcXVlIG8gw6FsYnVtIENoZWVrIHRvIENoZWVrIMOpIHF1YXNlIHRvdGFsbWVudGUgYWPDunN0aWNvLCB0b2RhcyBhcyBtw7pzaWNhcyBlc3TDo28gYWNpbWEgZGUgMC41IG5vIG7DrXZlbCBkZSBhY8O6c3RpY2EsIGVucXVhbnRvIG8gSm9hbm5lIGVzdMOhIGJlbSBwcsOzeGltbyBkZSAwLiBBcyBmYWl4YXMgQW5nZWwgRG93biBlIE1pbGxpb24gUmVhc29ucyBzw6NvIHRvY2FkYXMgbm8gcGlhbm8gZSBubyB2aW9sw6NvLCBwb3IgaXNzbyBhcHJlc2VudGFtIG1haW9yIGFjw7pzdGljYSBxdWUgYXMgb3V0cmFzIGZhaXhhcyBkbyBKb2FubmUu